package com.ruoyi.service;

import com.ruoyi.domain.CarCorder;
import com.ruoyi.domain.MonthUserStatisticsDTO;
import com.ruoyi.domain.SaveRescue;
import com.ruoyi.domain.ServiceTypeCount;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;

/**
* @author LENOVO
* @description 针对表【car_corder(用户订单表)】的数据库操作Service
* @createDate 2025-08-07 14:46:18
*/
public interface CarCorderService {
    /**
     * 根据日期查询当天的订单总数
     * @param date 日期
     * @return 订单总数
     */
    int countOrdersByDate(Date date);

    /**
     * 根据日期查询当天的订单总金额
     * @param date 日期
     * @return 订单总金额
     */
    BigDecimal sumOrderAmountByDate(Date date);

    /**
     * 根据日期查询当天的用户新增数量
     * @param date 日期
     */
    int userAddCount(@Param("date") Date date);

    /**
     * 根据日期查询当天的商户新增数目
     * @param date 日期
     */
    int merchantAddCount(@Param("date") Date date);

    /**
     * 查询商户总数
     */
    int merchantCount();

    /**
     * 查询用户总数
     */
    int userCount();

    /**
     * 根据日期查询各服务类别的订单数量
     * @param date 目标日期
     */
    ServiceTypeCount countOrderByServiceType(Date date);

    /**
     * 查询服务类别的所有订单数量
     */
    ServiceTypeCount countAllOrderByServiceType();

    /**
     * 根据日期查询当天救援任务处理情况
     * @param date 目标日期
     */
    SaveRescue countSaveRescue(@Param("date") Date date);

    /**
     * 查询全部救援任务处理情况
     */
    SaveRescue countAllSaveRescue();

    /**
     * 获取指定月份的用户注册统计数据
     * @param year 年份
     * @param month 月份
     * @return 月度统计DTO
     */
    MonthUserStatisticsDTO getMonthlyUserRegistrationStats(int year, int month);
}
